home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 2004 #9 / Amiga Plus CD - 2004 - No. 09.iso / amigaplus / tools / dev_libs / feelin040718 / sources / dataspace / data.c next >
C/C++ Source or Header  |  2004-08-03  |  2KB  |  87 lines

  1. #include "Private.h"
  2.  
  3. //#define DB_ADD
  4.  
  5. ///DS_Add
  6. F_METHODM(APTR,DS_Add,FS_Dataspace_Add)
  7. {
  8.    struct LocalObjectData *LOD = F_LOD(Class,Obj);
  9.  
  10.    F_Do(Obj,F_IDM(FM_Dataspace_Remove),Msg -> ID);
  11.  
  12.    if (Msg -> Size && Msg -> Data)
  13.    {
  14.       struct FeelinChunkData *chunk;
  15.  
  16.       if (chunk = F_NewP(LOD -> Pool,Msg -> Size + sizeof (struct FeelinChunkData)))
  17.       {
  18. ///DB_ADD
  19. #ifdef DB_ADD
  20.          ULONG *data = (ULONG *)(((ULONG)(chunk)) + sizeof (struct FeelinChunkData));
  21. #endif
  22. //+
  23.          chunk -> ID    = Msg -> ID;
  24.          chunk -> Size  = Msg -> Size;
  25.  
  26.          CopyMem(Msg -> Data,(APTR)((ULONG)(chunk) + sizeof (struct FeelinChunkData)),Msg -> Size);
  27. ///DB_ADD
  28. #ifdef DB_ADD
  29.          F_DebugOut("Dataspace.Add - ID 0x%08lx (%4.4s) - Data: %08lx%08lx%08lx%08lx\n",Msg -> ID,&Msg -> ID,data[0],data[1],data[2],data[3]);
  30. #endif
  31. //+
  32.          F_LinkTail(&LOD -> Chunks,chunk);
  33.  
  34.          return chunk;
  35.       }
  36.    }
  37.    return NULL;
  38. }
  39. //+
  40. ///DS_Remove
  41. F_METHODM(LONG,DS_Remove,FS_Dataspace_Remove)
  42. {
  43.    struct LocalObjectData *LOD = F_LOD(Class,Obj);
  44.    struct FeelinChunkData *chunk;
  45.  
  46.    if (chunk = (APTR)(F_DoA(Obj,F_IDM(FM_Dataspace_Find),Msg)))
  47.    {
  48.       chunk = (APTR)((ULONG)(chunk) - sizeof (struct FeelinChunkData));
  49.  
  50.       F_LinkRemove(&LOD -> Chunks,chunk);
  51.  
  52.       F_DisposeP(LOD -> Pool,chunk);
  53.  
  54.       return TRUE;
  55.    }
  56.    return FALSE;
  57. }
  58. //+
  59. ///DS_Find
  60. F_METHODM(APTR,DS_Find,FS_Dataspace_Find)
  61. {
  62.    struct LocalObjectData *LOD = F_LOD(Class,Obj);
  63.    struct FeelinChunkData *chunk;
  64.    APTR                    next = LOD -> Chunks.Head;
  65.    
  66.    while (chunk = F_NextNode(&next))
  67.    {
  68.       if (chunk -> ID == Msg -> ID)
  69.          return (APTR)((ULONG)(chunk) + sizeof (struct FeelinChunkData));
  70.    }
  71.    return NULL;
  72. }
  73. //+
  74. ///DS_Clear
  75. F_METHOD(void,DS_Clear)
  76. {
  77.    struct LocalObjectData *LOD = F_LOD(Class,Obj);
  78.    struct FeelinChunkData *chunk;
  79.  
  80.    while (chunk = (APTR)(LOD -> Chunks.Head))
  81.    {
  82.       F_LinkRemove(&LOD -> Chunks,chunk);
  83.       F_DisposeP(LOD -> Pool,chunk);
  84.    }
  85. }
  86. //+
  87.